行为型-解释器模式

概念

Interpreter Pattern:定义一个语言(使用规定格式和语法的代码)的文法,并且建立一个解释器来解释该语言钟的句子。

img

使用

我们的编译器,在对代码进行编译的时候也用到了该模式

下面做一个简单的解释器,一个给机器人下发指令的解释器

命令 参数
direction 移动方向 ‘up’ ‘down’ ‘left’ ‘right’
action 移动方式 ‘move’ ‘run’
distance 移动距离 an integer
表达式终结符号 ‘;’

我们在代码中,写上以上命令的具体实现,通过建立一个映射关系,比如传入 up run 5; 可以很快将指令转换成行为,表示向上跑5米

优点

  • 易于改变和扩展文法
  • 每一条文法规则都可以表示为一个类,所以可以很方便地实现一个简单的语言
  • 增加新的解释表达式较为方便,符合开闭原则
  • 实现文法较为容易:在抽象语法树中每一个表达式节点类的实现方式都是相似的,这些类的代码编写都不会特别复杂,还可以通过一些工具自动生成节点类代码

缺点

  • 对于复杂文法难以维护:每一个规则至少需要定义一个类,所以如果一个语言包含太多文法规则,类的个数会急剧增加,导致系统难以管理和维护,此时可以考虑使用语法分析程序等方式来取代解释器模式
  • 执行效率较低:因为解释器模式中使用了大量的循环和递归调用,因此在解释较为复杂的句子时其速度很慢,而且代码的调试过程也比较麻烦